/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import JPAControllers.*;
import JPAControllers.exceptions.PreexistingEntityException;
import Persistencia.*;
import dominio.SesionDomain;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ControladorSesion {
    SesionDomain sesionD;
    Fisioterapeuta fisio;
    Paciente pac;
    Sesion sesion;
    SesionJpaController controlador;
    ControladorPaciente controladorPac;
    ControladorFisioterapeuta controladorFisio;

    public String guardarSesion(){
        String res="";
        try {
            controlador = new SesionJpaController();            
            setSesion(1);
            controlador.create(sesion);            
            res="Se agrego exitosamente la sesion del paciente: "+
                    ((Paciente)sesion.getPaciente()).getNombre()+" "+((Paciente)sesion.getPaciente()).getApellido()+
                    " en la fecha: "+sesion.getFecha();
            return res;
        }catch(Exception ex){
            res="No se pudo agregar la sesion para el paciente: "+((Paciente)sesion.getPaciente()).getNombre()+" "+((Paciente)sesion.getPaciente()).getApellido();
            return res;
        }
    }

    public List<Sesion> encontrarSesiones(){
        controlador = new SesionJpaController();
        List<Sesion> sesTota=controlador.findSesionEntities();
        List<Sesion> sesFin=new ArrayList();
        for(int i=0;i<sesTota.size();i++){
            if(sesTota.get(i).getEstado().equals("1")){
                sesFin.add(sesTota.get(i));
            }
        }
        return sesFin;
    }

    public void setSes(Sesion ob){
        sesion=ob;
    }

    public void setSesion(int i){
        sesion=encontrarSesion(""+sesionD.getIdSesion());
        controladorFisio= new ControladorFisioterapeuta();
        controladorPac= new ControladorPaciente();
        System.out.println(sesionD.getIdPaciente()+" "+sesionD.getIdFisioterapeuta()+" ---");
        pac=controladorPac.encontrarPaciente(sesionD.getIdPaciente());
        fisio=controladorFisio.encontrarFisioterapeuta(sesionD.getIdFisioterapeuta());
        java.util.Date date = new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
        String fecha = sdf.format(date);
        sesion.setEstado("1");
        sesion.setPaciente(pac);
        sesion.setFisioterapeuta(fisio);
        sesion.setFecha(fecha);
        sesion.setEvolucionLogros(sesionD.getEvolucionLogros());
        sesion.setProgresoTerapia(sesionD.getProgresoTerapia());
        sesion.setRecomendaciones(sesionD.getRecomendaciones());
        sesion.setVideo(sesionD.getVideo());
        if(i==0){
            sesion.setFecha(encontrarSesion(""+sesionD.getIdSesion()).getFecha());
        }else{
            sesion.setFecha(fecha);
        }
    }

    public void setSesionD(SesionDomain in){
        sesionD=in;
    }

    public void modificarSesion(){
        try {
            controlador = new SesionJpaController();
            controlador.edit(sesion);
        }catch (Exception ex) {
            ex.printStackTrace();
        }
    }

public List<Sesion> encontrarMisSesiones(String idFisio) {
        controlador= new SesionJpaController();
        List<Sesion> ses=controlador.findSesionEntities();
        List<Sesion> ses2=new ArrayList<Sesion>();
        for(int i=0;i<ses.size();i++){
            if(ses.get(i).getFisioterapeuta().getIdFisioterapeuta()==Integer.parseInt(idFisio)&&ses.get(i).getEstado().equals("1")){
                ses2.add(ses.get(i));
            }
        }
        Sesion parc=null;
        for(int i=0;i<ses2.size();i++){
            for(int j=0;j<ses2.size();j++){
                if(ses2.get(i).getPaciente().getIdPaciente()<ses2.get(j).getPaciente().getIdPaciente()){
                    parc=ses2.get(i);
                    ses2.remove(i);
                    ses2.add(j,parc);
                }
            }
        }
        for(int i=0;i<ses2.size();i++){
            for(int j=0;j<ses2.size();j++){
                if(ses2.get(i).getIdSesion()<ses2.get(j).getIdSesion()&&ses2.get(i).getPaciente().getIdPaciente()==ses2.get(j).getPaciente().getIdPaciente()){
                    parc=ses2.get(i);
                    ses2.remove(i);
                    ses2.add(j,parc);
                }
            }
        }
        return ses2;
    }

    public List<Sesion> encontrarMisSesionesPac(String idPaciente) {
        controlador= new SesionJpaController();
        List<Sesion> ses=controlador.findSesionEntities();
        for(int i=0;i<ses.size();i++){
            if(ses.get(i).getPaciente().getIdPaciente()!=Integer.parseInt(idPaciente)&&ses.get(i).getEstado().equals("1")){
                ses.remove(i);
                i--;
            }
        }
        Sesion parc=null;
        for(int i=0;i<ses.size();i++){
            for(int j=0;j<ses.size();j++){
                if(ses.get(i).getIdSesion()<ses.get(j).getIdSesion()){
                    parc=ses.get(i);
                    ses.remove(i);
                    ses.add(j,parc);
                }
            }
        }
        return ses;
    }

    public Sesion encontrarSesion(String idSesion) {
        Sesion ses=new Sesion();
        List<Sesion> listaTodosSesion=encontrarSesiones();
        for(int i=0;i<listaTodosSesion.size();i++){
            if(listaTodosSesion.get(i).getIdSesion().intValue()==Integer.parseInt(idSesion)&&listaTodosSesion.get(i).getEstado().equals("1")){
                ses=(listaTodosSesion.get(i));
                break;
            }
        }
    return ses;
    }
    public void eliminarSesion(Sesion s){
        try {
            sesion=s;
            sesion.setEstado("0");
            controlador.edit(sesion);
        }catch(Exception ex){}
    }

    public SesionDomain convertirDomain(Sesion log) {
        SesionDomain sesRet=new SesionDomain();
        sesRet.setEstado(log.getEstado());
        sesRet.setEvolucionLogros(log.getEvolucionLogros());
        sesRet.setFecha(log.getFecha());
        sesRet.setIdSesion(""+log.getIdSesion());
        sesRet.setProgresoTerapia(log.getProgresoTerapia());
        sesRet.setRecomendaciones(log.getRecomendaciones());
        sesRet.setVideo(log.getVideo());
        sesRet.setIdPaciente(""+log.getPaciente().getIdPaciente());
        sesRet.setIdFisioterapeuta(""+log.getFisioterapeuta().getIdFisioterapeuta());
        return sesRet;
    }

    public Object encontrarMisSesionesYFisio(String idFisio) {
        controlador= new SesionJpaController();        
        controladorFisio= new ControladorFisioterapeuta();
        Map<String, Object> myModel =controladorFisio.listarCoordinador(idFisio);
        List<Fisioterapeuta> losMios=(List<Fisioterapeuta>)myModel.get("mios");
        List<Sesion> ses=controlador.findSesionEntities();
        List<Sesion> ses2=new ArrayList<Sesion>();
        for(int i=0;i<ses.size();i++){
            if(ses.get(i).getFisioterapeuta().getIdFisioterapeuta()==Integer.parseInt(idFisio)&&ses.get(i).getEstado().equals("1")){
                ses2.add(ses.get(i));
            }
            for(int y=0;y<losMios.size();y++){
                if(ses.get(i).getFisioterapeuta().getIdFisioterapeuta()==losMios.get(y).getIdFisioterapeuta()&&ses.get(i).getEstado().equals("1")){
                    ses2.add(ses.get(i));
                }
            }
        }
        return ses2;
    }

    public List<Sesion> encontrarSesionesFecha(String fechaNacimientoMes, String fechaNacimientoAno) {
        List<Sesion> res = new ArrayList();
        List<Sesion> todas = encontrarSesiones();
        String mes;
        String ano;
        String dia;
        int posicionRepetida=-1;
        for(int i=0;i<todas.size();i++){
            dia = todas.get(i).getFecha().split("/")[0];
            mes = todas.get(i).getFecha().split("/")[1];
            ano = todas.get(i).getFecha().split("/")[2];
            if(mes.equals(fechaNacimientoMes) && ano.equals(fechaNacimientoAno)){
                posicionRepetida=-1;
                for(int a=0;a<res.size();a++){
                    if(todas.get(i).getPaciente()==res.get(a).getPaciente()){
                        posicionRepetida=-2;
                        if(Integer.valueOf(dia)>Integer.valueOf(res.get(a).getFecha().split("/")[0])){
                            posicionRepetida=a;
                        }
                    }
                }
                if(posicionRepetida==-1){
                   res.add(todas.get(i));
                }else if(posicionRepetida==-2){
                    
                }else{
                    res.remove(posicionRepetida);
                    res.add(todas.get(i));
                }
            }
        }

        return res;
    }
}
